package com.medusa.aps.business.model.constant;

/**
 * @author 张治保
 * @since 2023/10/13
 */
public interface RegexPool extends cn.hutool.core.lang.RegexPool {

    /**
     * 订单号 不能包含空格 且必须是字母、数字、英文字符的其中一种或几种的组合
     * 键盘上能打出来的所有非空字符
     */
    String ORDER_NO = "^[\\p{Alnum}\\p{Punct}&&[^\\s]]+$";

    /**
     * 名称 不能包含为空且必须是汉字、字母、数字、字符的其中一种或几种的组合
     */
    String NAME = "^[\\p{Alnum}\\p{Punct}\u2E80-\u2EFF\u2F00-\u2FDF\u31C0-\u31EF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\uD840\uDC00-\uD869\uDEDF\uD869\uDF00-\uD86D\uDF3F\uD86D\uDF40-\uD86E\uDC1F\uD86E\uDC20-\uD873\uDEAF\uD87E\uDC00-\uD87E\uDE1F&&[^\\s]]+$";

    /**
     * 不能包含空字符（换行 回车 空格 等）
     */
    String NOT_CONTAIN_BLANK = "^$|^(?!.*\\s).+$";

    /**
     * 只能为汉字
     */
    String ONLY_CHINESE = "^[\\u4e00-\\u9fa5]+$";


    /**
     * 电话、手机号
     */
    String PHONE = "^$|(^(?:\\+?86\\s?)?(?:(?:13\\d|14[57]|15\\d|166|17[35678]|18\\d|19[89])\\d{8}|(?:\\d{3,4}-?)?\\d{7,8})$)";
    /**
     * 大于等于0的整数或小数
     */
    String DECIMAL = "^[0-9]+(\\.[0-9]+)?$";
    /**
     * 大于等于0的整数
     */
    String NUMERICAL = "^[0-9]+$";
    /**
     * yyyy-MM-dd HH:mm:ss 时间正则表达式
     */
    String DATE_TIME_FORMAT = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";

    /**
     * 0天1小时0分钟0秒 正则表达式
     */
    String REGEX_DAY_HOUR_MINUTE_SECOND = "^(?!(0天0(小时|时)0(分钟|分)0(秒钟|秒)))\\d{1,9}天([01]?[0-9]|2[0-3])(小时|时)([0-5][0-9]|[0-9])(分钟|分)([0-5][0-9]|[0-9])(秒|秒钟)";

    /**
     * 大于0的两位小数
     */
    String POSITIVE_NUMBERS = "^(?!0+(\\.0{1,2})?$)[0-9]+(\\.[0-9]{1,2})?$";
}
